#include "model/der/DiagramaDer.h"
#include "model/der/ViaDER.h"
#include "utils/constantes.h"
#include <gtkmm-2.4/gtkmm/messagedialog.h>

DiagramaDer::DiagramaDer(const std::string & name):Diagram(name) {
}

DiagramaDer::~DiagramaDer() {
}

int DiagramaDer::getType(){
    return DIAGRAMA_DER;
}
void DiagramaDer::serializeConnectedComponents(Component* component, XmlWriter & writer)
{
    serializeConnectedComponents(*component->getAttributeConnectors(), writer);
    serializeConnectedComponents(*component->getExitConnectors(), writer);
}


void DiagramaDer::serializeConnectedComponents(std::vector<Connector*> connectors, XmlWriter & writer) {
    xmlNode* nodoActual;
    for(unsigned i = 0; i < connectors.size(); i++){
        nodoActual = connectors[i]->getVia() != NULL ?
            writer.addCurrentNodeChild(connectors[i]->getVia()->getName().c_str(), "") :
            writer.addCurrentNodeChild(TARGET_VACIO, "");
        Utils utils;
        writer.addProperty(nodoActual, TARGET_ID, utils.convertToString(getId(connectors[i]->getVia())).c_str());
    }
}

//Esta funcion parece no usarse
/*void validateConections(std::vector<Connector*> connectors){
    bool conectado = false;
    for(unsigned i = 0; i < connectors.size(); i++){
        if ( connectors[i]->getVia() != NULL ){
            conectado = true;
            break;
        }
    }
    if (conectado){
        printf("123");
    }
}*/

void DiagramaDer::validateDiagram(std::fstream & filestr){
    bool valido = true;

    filestr<< "<HTML><HEAD><TITLE>ARCHIVO DE VALIDACION</TITLE></HEAD><BODY> ";

    for(std::vector<Component*>::iterator it = m_components.begin(); it != m_components.end(); ++it)
        (*it)->validate(filestr,valido);

    filestr << "<H1>**************************************************************************************************" << "</H1>";
    filestr << "<H1>**************************************************************************************************" << "</H1>";

    if (valido) {
        Gtk::MessageDialog msg("El diagrama es válido. Se ha generado el html de los detalles.");
        msg.run();
        filestr << "<font color=\"green\">" << "<STRONG> EL DIAGRAMA ANALIZADO ES VALIDO </STRONG>" << std::endl;
    }else{
        Gtk::MessageDialog msg("El diagrama es inválido. Se ha generado el html de los detalles.");
        msg.run();
        filestr << "<font color=\"red\">" <<"<STRONG> EL DIAGRAMA ANALIZADO ES INVALIDO </STRONG>" <<std::endl;
    }

    filestr<< "</BODY></HTML>";
}
